# 文件操作 -- 打开-读-写-关闭
# 打开文件
# f = open('E:/study/auto-test/test.txt', 'r') # 读文件
# # print(f)
# # print(type(f))
# # 对文件进行写入操作
# f.write('hello world') # 此时报错，我们对文件的操作是读文件，在读操作时，不能对文件进行写入
# # 关闭文件
# f.close()
import datetime
import random

# f = open('E:/study/auto-test/test.txt', 'w') # 写文件
# # 写文件
# f.write('hello')
# print(f)
# # 关闭文件
# f.close()

# 如果是使用 w 方式打开，会清空掉文件原有的内容！
# f = open('E:/study/auto-test/test.txt', 'w')
# f.close()

# 使用 a 方式打开，则不会清空，写的内容会追加在原有内容的末尾
# f = open('E:/study/auto-test/test.txt', 'w')
# f.write('1111111111111  ')
# f.close()
#
# f = open('E:/study/auto-test/test.txt', 'a')
# f.write('2222222222222222 ')
# f.close()

# 打开文件上限的个数
# flist = []
# count = 0
# while True:
#     f = open('E:/study/auto-test/test.txt', 'r')
#     flist.append(f)
#     # f.close()
#     count += 1
#     print(f'打开文件的个数：{count}')

# 1. 使用 read 来读取文件内容，指定读几个字符。
# f = open('E:/study/auto-test/test.txt', 'r')
# # 读前两个字符
# result = f.read(2) # 运行错误，文间内容的编码方式与编译器读取的方式 不匹配
# print(result)
# f.close()

# f = open('E:/study/auto-test/test.txt', 'r', encoding='utf-8')
# # 读前两个字符
# result = f.read(2)
# print(result)
# f.close()

# 2. 更常见的需求，是按行来读取~
# f = open('E:/study/auto-test/test.txt', 'r', encoding='utf-8')
# for line in f:
#     print(f'line = {line}', end = '')
# f.close()

# 3. 使用 readlines 方法直接把整个文件所有内容都读出来，按照 行 组织 到一个列表里
# f = open('E:/study/auto-test/test.txt', 'r', encoding='utf-8')
# lines = f.readlines()
# print(lines)
# f.close()

# 上下文管理器 -- 解决忘记关闭文件的问题
# 当 with 对应的代码块执行结束，就会自动的执行 f 的 close
# def func():
#     with open('E:/stydy/auto-test/test.txt', 'r', encoding='utf-8') as f:
#         #代码
#         #代码
#         #代码
#         if cond:
#             return
#         #代码
#         #代码
#         #代码
#         if cond:
#             return
#         #代码
#         #代码
#         #代码
#         if cond:
#             return
#         #代码
#         #代码
#         #代码


# 日期计算工具
# 导入模块
# import datetime
# 先构造 datetime 变量
#         模块     类型
# date1 = datetime.datetime(year=2020, month=12, day=31)
# date2 = datetime.datetime(year=2025, month=12, day=31)
# print(date2 - date1)

# from datetime import datetime
# date1 = datetime(year=2020, month=12, day=31)
# date2 = datetime(year=2025, month=12, day=31)
# print(date2 - date1)

# import datetime as dt
# date1 = dt.datetime(year=2020, month=12, day=31)
# date2 = dt.datetime(year=2025, month=12, day=31)
# print(date2 - date1)

# 单词逆序
# def reverseWords(s):
#     words = s.split(' ') # 以空格进行分割
#     words.reverse() # 单词逆置
#     return ' '.join(words) # 拼接
#
# print(reverseWords('Hello World !'))


# 旋转字符串
# def ratateString(s, goal):
#     if len(s) != len(goal):
#         return False
#     return goal in (s + s)
#
# print(ratateString("abcde", "bcdea"))
# print(ratateString("abcde", "bcdeac"))

#统计字符串前缀
# def countPrefixs(words: list, s: str):
#     count = 0
#     for word in words:
#         if s.startswith(word):
#             count += 1
#     return count
#
# print(countPrefixs(["a", "ab", "bc","abc"], "ab"))

# 实现 文件搜索工具
# 输入要查找的路径，输入要搜索的文件名
# 自动的在指定的路径中进行查找
# import os
#
# inputPath = input('请输入要搜索的路径：')
# pattern = input('请输入要搜索的关键词：')
#
# # for dirpath, dirnames, filenames in os.walk(inputPath):
# #     print('--------------------------------------')
# #     print(f'dirpath: {dirpath}')
# #     print(f'dirnames: ')
# #     for name in dirnames:
# #         print(name)
# #     print('filenames: ')
# #     for name in filenames:
# #         print(name)
#
# for dirpath, dirnames, filenames in os.walk(inputPath):
#     for f in filenames:
#         if pattern in f:
#             print(f'{dirpath}/{f}')

# pip 包管理器

# 二维码生成工具
# import qrcode
# img = qrcode.make("小路飞，温馨提醒：天冷注意保暖哦！")
# img.save("qrcode.png")

# # 操作 excel
# import xlrd
# # 1. 先打开 xlsx 文件
# xlsx = xlrd.open_workbook('E:/study/Python_test/test.xlsx')
# # 2. 获取到指定的标签页
# table = xlsx.sheet_by_index(0)
# # 3. 获取到表格中有多少行
# nrows = table.nrows
# # print(f'nrows: {nrows}')
# # 4. 进行循环统计操作
# total = 0
# count = 0
# for i in range(1, nrows):
#     # 拿到当前同学的班级
#     classId = table.cell_value(i, 1) # 拿到班级名
#     if classId == 100:
#         total += table.cell_value(i, 2) # 得到该班级的总分数
#         count += 1
# print(f'平均分：{total / count}')


# # 程序员鼓励师
# from pynput import keyboard
# from playsound import playsound
# from threading import Thread
#
# soundList = ['sound/1.mp3', 'sound/2.mp3', 'sound/3.mp3']
#
# # 记录按下键盘的次数
# count = 0
#
# def onRelease(key):
#     '''
#     用户在释放键盘的时候，就会被调用到。
#     这个函数不是咱们自己主动调用的，而是八这个函数交给了 Listener,
#     由 Listener 在用户释放按键的时候自动调用 --- 回调函数
#     :param key: 用户按下了哪个键
#     '''
#     print(key)
#     global count
#     count += 1
#     if count % 10 == 0:
#         # 播放音频
#         # 生成随机数
#         i = random.randint(0, len(soundList) - 1)
#         #消耗时间较多，可能会引起输入的卡顿（不流畅）
#         playsound(soundList[i])
#
#         # t = Thread(target=playsound, args=(soundList[i],))
#         # t.start()
#
# listener = keyboard.Listener(on_release=onRelease)
# listener.start()
# listener.join()


